import axios from 'axios'
import inform from './utils/Inform';
import router from './router';
import { getToken, setToken } from '@/utils/tools'

let baseUrl: string;

if (process.env.NODE_ENV === "production") {
    baseUrl = "/AssociationSystem";
    // 生产环境下使用真实路径
    // baseUrl = window.location.protocol + "//" + window.location.host;
    // baseUrl = 'http://192.168.10.187/api'
    // baseUrl = 'http://175.178.51.126/api'
} else {
    // 非生产环境下，都使用代理服务器
    baseUrl = "/api";
}
const request = axios.create({
    timeout: 6000,
    baseURL: baseUrl,
})


// 请求拦截
request.interceptors.request.use(
    (config) => {
        const token = getToken();
        if (token && config.headers) {
            config.headers.Authorization = token;
        }
        return config;
    }
)
// 响应拦截
request.interceptors.response.use(
    response => {
        const code = response.data.code
        switch (code) {
            // 修改信息
            case 2000: inform('修改成功'); break
            // 失败
            case 4000: inform('修改失败'); break
            // 获取验证码
            case 2001: inform('发送成功'); break
            case 4001: inform('发送失败'); break
            // 导出表格
            case 2002:inform('导出成功');break
            case 4002:inform('导出失败');break
            // 团委认证社团
            case 2003:inform('认证成功');break
            case 4003:inform('认证失败');break
            // 保存信息
            case 2005:inform('保存成功');break
            case 4005:inform('保存失败');break
            // 注册账号
            case 2006:inform('注册成功');break
            case 4006:inform('注册失败');break
            // 发送验证码
            case 2007:inform('发送成功');break
            case 4007:inform('邮箱已注册');break
            // 登录
            case 2008: inform('登录成功'); break
            case 4008: inform("密码错误");  break 
            // 更新照片墙
            case 2009:inform('更新成功');break
            case 4009:inform('更新失败');break
            // 进入下一轮面试
            case 2012:inform('已进入下一轮');break
            case 4012:inform('进入失败');break
            case 4013:inform('已是最后一轮');break

        }
        if (response.headers.authorization) {
            setToken(response.headers.authorization)
        }
        return response.data.data;
    },
    error => {
        const status = error.response.status

        switch (status) {
            // 没有登陆,未授权
            case 401: inform('尚未登录'); router.push({ name: 'Login' }); break
            // 页面不存在
            case 404:inform('页面不存在');break
            // 服务器崩溃
            case 502: inform('服务器崩溃'); break
        }
        return Promise.reject(error)
    }
)

export default class Request {
    public baseUrl: string = baseUrl;

    public get(url: string): Promise<any> {
        return request.get(url)
    }
    public post(url: string, data?: any): Promise<any> {
        return request.post(url, data)
    }
}